home *** CD-ROM | disk | FTP | other *** search
/ Clickx 47 / Clickx 47.iso / assets / software / Miro_Installer.exe / chrome / content / preffuncs.js < prev    next >
Encoding:
JavaScript  |  2008-01-10  |  10.8 KB  |  337 lines

  1. /*
  2. # Miro - an RSS based video player application
  3. # Copyright (C) 2005-2007 Participatory Culture Foundation
  4. #
  5. # This program is free software; you can redistribute it and/or modify
  6. # it under the terms of the GNU General Public License as published by
  7. # the Free Software Foundation; either version 2 of the License, or
  8. # (at your option) any later version.
  9. #
  10. # This program is distributed in the hope that it will be useful,
  11. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. # GNU General Public License for more details.
  14. #
  15. # You should have received a copy of the GNU General Public License
  16. # along with this program; if not, write to the Free Software
  17. # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
  18. */
  19.  
  20. var pybridge = Components.classes["@participatoryculture.org/dtv/pybridge;1"].
  21.                 getService(Components.interfaces.pcfIDTVPyBridge);
  22.  
  23. var originalMoviesDir = null;
  24.  
  25. function onload() {
  26.   this.document.selectDirectoryWatch = selectDirectoryWatch;
  27.   jsbridge.setPrefDocument(this.document);
  28.   pybridge.startPrefs();
  29.   selectDirectoryWatch(false);
  30.   document.getElementById("runonstartup").checked = pybridge.getRunAtStartup();
  31.   setCloseToTray(pybridge.minimizeToTray());
  32.   document.getElementById('warn-on-quit').checked = pybridge.getWarnIfDownloadingOnQuit();
  33.   setCheckEvery(pybridge.getCheckEvery());
  34.   setMoviesDir(pybridge.getMoviesDirectory());
  35.   originalMoviesDir = pybridge.getMoviesDirectory();
  36.   setMaxManual(pybridge.getMaxManual());
  37.   setHasMinDiskSpace(pybridge.getPreserveDiskSpace());
  38.   setMinDiskSpace(pybridge.getPreserveDiskSpaceAmount());
  39.   setExpire(pybridge.getExpireAfter());
  40.   setResumeVideosMode(pybridge.getResumeVideosMode());
  41.   setSinglePlayMode(pybridge.getSinglePlayMode());
  42.   setBTMinPort(pybridge.getBTMinPort());
  43.   setBTMaxPort(pybridge.getBTMaxPort());
  44.   document.getElementById("bittorrent-use-upnp").checked =
  45.           pybridge.getUseUpnp();
  46.   document.getElementById("bittorrent-encryption-required").checked =
  47.           pybridge.getBitTorrentEncReq();
  48.  
  49.  
  50.   setupBandwidthLimiter('upstream',
  51.           function() { return pybridge.getLimitUpstream(); },
  52.           function(value) { pybridge.setLimitUpstream(value); },
  53.           function() { return pybridge.getLimitUpstreamAmount(); },
  54.           function(value) { pybridge.setLimitUpstreamAmount(value); })
  55.   setupBandwidthLimiter('downstream',
  56.           function() { return pybridge.getLimitDownstream(); },
  57.           function(value) { pybridge.setLimitDownstream(value); },
  58.           function() { return pybridge.getLimitDownstreamAmount(); },
  59.           function(value) { pybridge.setLimitDownstreamAmount(value); })
  60. }
  61.  
  62. function ondialogaccept() {
  63.   checkMoviesDirChanged();
  64.   checkBTPorts();
  65.   pybridge.updatePrefs()
  66.   jsbridge.setPrefDocument(null);
  67. }
  68.  
  69. /* Convert a floating point object into a string to show to the user.  We
  70.  * round it to 2 decimal places to get arround binary to decimal conversions.
  71.  */ 
  72. function floatToPrintable(value) {
  73.     value = Math.round(value * 100);
  74.     var intPart = Math.floor(value / 100);
  75.     var decimalPart = value % 100;
  76.     while(decimalPart % 10 == 0) {
  77.         if(decimalPart == 0) return intPart;
  78.         decimalPart /= 10;
  79.     }
  80.     return intPart + "." + decimalPart;
  81. }
  82.  
  83.  
  84. function runOnStartupChange() {
  85.   if (document.getElementById("runonstartup").checked)
  86.       pybridge.setRunAtStartup(true);
  87.   else
  88.       pybridge.setRunAtStartup(false);
  89. }
  90.  
  91. function warnOnQuitChange() {
  92.   if (document.getElementById("warn-on-quit").checked)
  93.       pybridge.setWarnIfDownloadingOnQuit(true);
  94.   else
  95.       pybridge.setWarnIfDownloadingOnQuit(false);
  96. }
  97.  
  98. function closeToTrayChange() {
  99.   var radio = document.getElementById('close-to-tray-yes');
  100.   pybridge.setMinimizeToTray(radio.selected);
  101. }
  102.  
  103. function setCheckEvery(minutes) {
  104.   var check = document.getElementById("checkevery");
  105.   if (minutes == 30) check.value = "30";
  106.   else if (minutes == 60) check.value = "60";
  107.   else check.value = "never";
  108. }
  109.  
  110. function checkEveryChange(minutes) {
  111.    pybridge.setCheckEvery(parseInt(minutes));
  112. }
  113.  
  114. function setMoviesDir(directory) {
  115.     var moviesDirBox = document.getElementById('movies-directory');
  116.     moviesDirBox.abspath = directory;
  117.     moviesDirBox.value = pybridge.shortenDirectoryName(directory);
  118. }
  119.  
  120. function selectMoviesDirectory() {
  121.     var fp = Components.classes["@mozilla.org/filepicker;1"]
  122.             .createInstance(Components.interfaces.nsIFilePicker);
  123.  
  124.     fp.init(window, "Select a Directory to store downloads",
  125.             Components.interfaces.nsIFilePicker.modeGetFolder);
  126.     var res = fp.show();
  127.     if (res == Components.interfaces.nsIFilePicker.returnOK){
  128.         setMoviesDir(fp.file.path);
  129.     }
  130.  
  131. }
  132.  
  133. function addDirectoryWatch() {
  134.     var fp = Components.classes["@mozilla.org/filepicker;1"]
  135.             .createInstance(Components.interfaces.nsIFilePicker);
  136.  
  137.     fp.init(window, "Select a Directory to monitor",
  138.             Components.interfaces.nsIFilePicker.modeGetFolder);
  139.     var res = fp.show();
  140.     if (res == Components.interfaces.nsIFilePicker.returnOK){
  141.         pybridge.addDirectoryWatch(fp.file.path);
  142.     }
  143. }
  144.  
  145. function removeDirectoryWatch() {
  146.     var xulListBox = document.getElementById('movies-collection-listbox');
  147.     var selected = xulListBox.selectedItem;
  148.     if (selected) {
  149.       var id = selected.getAttribute('folder_id');
  150.       pybridge.removeDirectoryWatch(id);
  151.     }
  152. }
  153.  
  154. function toggleDirectoryWatchShown(checkbox) {
  155.     var id = checkbox.getAttribute('folder_id');
  156.     pybridge.printOut(id);
  157.     pybridge.toggleDirectoryWatchShown(id);
  158.     return true;
  159. }
  160.  
  161. function selectDirectoryWatch(always_false) {
  162.     var xulListBox = document.getElementById('movies-collection-listbox');
  163.     var selected = xulListBox.selectedItem;
  164.     var removeButton = document.getElementById('movies-collection-remove-folder');
  165.     if (selected && !always_false) {
  166.       removeButton.disabled = false;
  167.     } else {
  168.       removeButton.disabled = true;
  169.     }
  170. }
  171.  
  172. function checkMoviesDirChanged() {
  173.     var moviesDirBox = document.getElementById('movies-directory');
  174.     var currentMoviesDir = moviesDirBox.abspath;
  175.     if(originalMoviesDir != null && originalMoviesDir != currentMoviesDir) {
  176.         var params = { "out" : null }
  177.         window.openDialog('chrome://dtv/content/migrate.xul', 'migrate',
  178.                 'chrome,dependent,centerscreen,modal', params);
  179.         pybridge.changeMoviesDirectory(currentMoviesDir, params.out);
  180.     }
  181. }
  182.  
  183. function setupBandwidthLimiter(domIDBase, 
  184.         pybridgeGetEnabled, pybridgeSetEnabled,
  185.         pybridgeGetAmount, pybridgeSetAmount)
  186. {
  187.     var checkbox = document.getElementById("limit" + domIDBase);
  188.     var textbox = document.getElementById("max" + domIDBase);
  189.     var description = document.getElementById("max" + domIDBase + "-description");
  190.  
  191.     function setWidgetDisabled(disabled) {
  192.         if(disabled) {
  193.             textbox.setAttribute('disabled', true);
  194.             description.setAttribute('disabled', true);
  195.         } else {
  196.             textbox.removeAttribute('disabled');
  197.             description.removeAttribute('disabled');
  198.         }
  199.     }
  200.  
  201.     var enabled = pybridgeGetEnabled();
  202.     checkbox.checked = enabled;
  203.     setWidgetDisabled(!enabled);
  204.  
  205.     textbox.value = pybridgeGetAmount();
  206.  
  207.     function onCheckboxChanged() {
  208.         setWidgetDisabled(!checkbox.checked);
  209.         pybridgeSetEnabled(checkbox.checked);
  210.     }
  211.     checkbox.addEventListener('command', onCheckboxChanged, true);
  212.  
  213.     function onTextboxChanged() {
  214.         var value = parseInt(textbox.value);
  215.         if ((value == 0) || (isNaN(value))) value = 1;
  216.         textbox.value = value;
  217.         pybridgeSetAmount(value);
  218.     }
  219.     textbox.addEventListener('change', onTextboxChanged, true);
  220. }
  221.  
  222. function setMaxManual(max) {
  223.     document.getElementById("maxmanual").value = max;
  224. }
  225.  
  226. function maxManualChange() {
  227.   var textbox = document.getElementById("maxmanual");
  228.   var value = parseInt(textbox.value);
  229.   if ((value == 0) || (isNaN(value))) value = 1;
  230.   textbox.value=value;
  231.   pybridge.setMaxManual(value);
  232. }
  233.  
  234. function setMinDiskSpace(min) {
  235.     document.getElementById("minspace").value = floatToPrintable(min);
  236. }
  237.  
  238. function setHasMinDiskSpace(hasit) {
  239.     document.getElementById("hasminspace").checked = hasit;
  240.     document.getElementById("minspace").disabled = !hasit;
  241. }
  242.  
  243. function hasMinSpaceChange() {
  244.   var ret = document.getElementById("hasminspace").checked;
  245.   var textbox = document.getElementById("minspace");
  246.   textbox.disabled = !ret;
  247.   pybridge.setPreserveDiskSpace(ret);
  248. }
  249.  
  250. function minSpaceChange() {
  251.   var textbox = document.getElementById("minspace");
  252.   var value = parseFloat(textbox.value);
  253.   if ((value == 0) || (isNaN(value))) value = 1;
  254.   textbox.value=value;
  255.   pybridge.setPreserveDiskSpaceAmount(value);
  256. }
  257.  
  258. function setExpire(days) {
  259.   var check = document.getElementById("expiration");
  260.   if (days == "1") check.value = "1";
  261.   else if (days == "3") check.value = "3";
  262.   else if (days == "6") check.value = "6";
  263.   else if (days == "10") check.value = "10";
  264.   else if (days == "30") check.value = "30";
  265.   else check.value = "never";
  266. }
  267. function expirationChange(days) {
  268.    pybridge.setExpireAfter(parseInt(days));
  269. }
  270.  
  271. function singlePlayModeChange() {
  272.   var radio = document.getElementById('single-play-mode-radio');
  273.   pybridge.setSinglePlayMode(radio.selected);
  274. }
  275.  
  276. function setCloseToTray(closeToTray) {
  277.   if(closeToTray) {
  278.     var button = document.getElementById('close-to-tray-yes');
  279.   } else {
  280.     var button = document.getElementById('close-to-tray-no');
  281.   }
  282.   document.getElementById('close-to-tray').selectedItem = button;
  283. }
  284.  
  285. function setSinglePlayMode(value) {
  286.   if(value) {
  287.     var button = document.getElementById('single-play-mode-radio');
  288.   } else {
  289.     var button = document.getElementById('continuous-play-mode-radio');
  290.   }
  291.   document.getElementById('play-mode-radiogroup').selectedItem = button;
  292. }
  293.  
  294. function resumeVideosModeChange() {
  295.   var checkbox = document.getElementById('resumeVideos');
  296.   pybridge.setResumeVideosMode(checkbox.checked);
  297. }
  298.  
  299. function setResumeVideosMode(value) {
  300.   var checkbox = document.getElementById('resumeVideos');
  301.   checkbox.checked = value
  302. }
  303.  
  304. function setBTMinPort(value) {
  305.   document.getElementById('btminport').value = value;
  306. }
  307.  
  308. function setBTMaxPort(value) {
  309.   document.getElementById('btmaxport').value = value;
  310. }
  311.  
  312. function btMinPortChange() {
  313.   var value = document.getElementById('btminport').value;
  314.   pybridge.setBTMinPort(value);
  315. }
  316.  
  317. function btMaxPortChange() {
  318.   var value = document.getElementById('btmaxport').value;
  319.   pybridge.setBTMaxPort(value);
  320. }
  321.  
  322. function checkBTPorts() {
  323.   if(pybridge.getBTMaxPort() < pybridge.getBTMinPort()) {
  324.     pybridge.setBTMaxPort(pybridge.getBTMinPort());
  325.   }
  326. }
  327.  
  328. function btUseUpnpChange() {
  329.   var checkbox = document.getElementById('bittorrent-use-upnp');
  330.   pybridge.setUseUpnp(checkbox.checked);
  331. }
  332.  
  333. function btEncryptionRequiredChange() {
  334.   var checkbox = document.getElementById('bittorrent-encryption-required');
  335.   pybridge.setBitTorrentEncReq(checkbox.checked);
  336. }
  337.